import messageStorage from '../../utils/message-storage.js'
import webSocket from '../../socket/socket'
import  storage from '../../utils/storage.js'
import api from '../../http/api'

/**
 * 离线消息是否同步
 */
let syncOfflineMsg =false;

/**
 * 离线消息未同步之前所有消息将存放到这里，等同步好之后加入
 */
let waitJoinMsg=[];
Page({


  data: {
    messageValue: "",
    msgRecord:[],
    openId:"",
    scorllId: "item-id-10",
    statusMsg:"正在连接服务器",
    socketStatus:-1
  },

  onLoad: function (options) {
      let openId =storage.getOpenId();
      this.setData({
        openId:openId
      })
      this.startWebSocket()
    
  },

  /**
   * 开始WebSocket
   */
  startWebSocket(){
       let openId =this.data.openId
        /**
         * 事件订阅
         */
        wx.event.on("socket-msg",(res)=>{
          /**
           * 如果没有进行同步，则加入等待队列中。
           */
          if(!syncOfflineMsg){
            waitJoinMsg.push(res.data)
            return;
          }
          let oldMsg =this.data.msgRecord;
          oldMsg.push(res.data)
          this.setData({
            msgRecord:oldMsg,
            scorllId: "item-id-" + (oldMsg.length - 1)
          })
        })

        wx.event.on("socket-events",(res)=>{
          /**
           * 小于0是连接失败
           */
          if(res.status<0){
            /**
             * 同步置为false，连接成功后开启进行消息同步
             */
            syncOfflineMsg=false;
            /**
             * 2秒后重试
             */
            setTimeout(() => {
              webSocket.connectServer(openId);
            }, 2000);
          }else{
            /**
             * 如果离线消息没有同步
             */
            if(syncOfflineMsg==false){
              this.pullOfflineMsg();
            }
          }
          this.setData({
            statusMsg:res.msg,
            socketStatus:res.status
          })
        })
        /**
         * 连接WebSocket
         */
        webSocket.connectServer(openId);
  },
  /**
   * 拉取离校消息
   */
  pullOfflineMsg(){
    api.listOffline().then((res)=>{
      let recored =res.data;
      /**
       * 加入先前的消息，并清空
       */
      recored.push(...waitJoinMsg)
      waitJoinMsg.length=0
      this.setData({
        msgRecord:recored,
        scorllId: "item-id-" + (res.data.length - 1)
      })
      syncOfflineMsg=true;
    }).catch((res)=>{
      syncOfflineMsg=true
    })
  },
  onMessageInput: function (e) {
    this.setData({
      messageValue: e.detail.value
    })
  },
  onSendMessage: function () {
    if(!webSocket.isConnect()){
      wx.showToast({
        title: '服务器未连接',
        icon:"none"
      })
      return
    }
    webSocket.sendMessage(this.data.messageValue)
    this.setData({
      messageValue:""
    })
  },
  onReady: function () {

  },

  onShow: function () {

  },


  onUnload: function () {

  },

})